package br.com.designless.view.helper;

import br.com.designless.business.model.TiposUsuario;
import br.com.designless.business.model.Usuarios;
import br.com.designless.view.Util.Util;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Administrador
 */
public class UsuarioHelper {

    public static final String ACAO_NOVO_USUARIO = "novoUsuario";
    public static final String ACAO_CANCELAR = "cancelar";
    public static final String ACAO_LOGIN = "login";
    public static final String ACAO_LOGOUT = "logout";
    public static final String ACAO_RECUPERAR_DADOS_USUARIO = "recuperarDadosUsuario";

    public static final String FORWARD_INICIO = "index.jsp";
    public static final String FORWARD_ACESSO_NEGADO = "acessoNegado.jsp";

    public static final String FORWARD_CADASTRO_USUARIO = "cadastroUsuario.jsp";
    public static final String FORWARD_JOGOS = "JogosServlet";

    public static final Integer TIPO_USUARIO_ADMINISTRADOR = 1;
    public static final Integer TIPO_USUARIO_JOGADOR = 2;

    public Usuarios carregarUsuarioAdministrador(HttpServletRequest request) {
        Usuarios usuario = carregarUsuario(request);
        TiposUsuario tipoUsuario = new TiposUsuario(TIPO_USUARIO_ADMINISTRADOR);

        usuario.setTipo(tipoUsuario);

        return usuario;
    }

    public Usuarios carregarUsuarioJogador(HttpServletRequest request) {
        Usuarios usuario = carregarUsuario(request);
        TiposUsuario tipoUsuario = new TiposUsuario(TIPO_USUARIO_JOGADOR);

        usuario.setTipo(tipoUsuario);

        return usuario;
    }

    private Usuarios carregarUsuario(HttpServletRequest request) {
        String login = request.getParameter("nomeUsuario");
        String senha = request.getParameter("senhaUsuario");
        String email = request.getParameter("email");
        String nome = request.getParameter("nomeCompleto");

        return new Usuarios(null, login, senha, email, nome);
    }

    public void logarUsuario(HttpServletRequest request, Usuarios usuario) {
        HttpSession sessao = request.getSession();

        synchronized(sessao) {
            sessao.setAttribute("usuario", usuario);
        }
    }

    public void logoutUsuario(HttpServletRequest request) {
        HttpSession sessao = request.getSession(false);

        if (sessao != null) {
            synchronized(sessao) {
                sessao.removeAttribute("usuario");
                sessao.invalidate();
            }
        }
    }

    public Usuarios getUsuarioSessao(HttpServletRequest request) {
        HttpSession sessao = request.getSession(false);
        Usuarios usuario = null;

        if (sessao != null) {
            synchronized(sessao) {
                usuario = (Usuarios) sessao.getAttribute("usuario");
            }
        }

        return usuario;
    }

    public boolean isUsuarioLogado(HttpServletRequest request) throws ServletException, IOException {
        return (getUsuarioSessao(request) != null);
    }

    public boolean isUsuarioAdministrador(Usuarios usuario) {
        return (TIPO_USUARIO_ADMINISTRADOR.equals(usuario.getTipo().getId()));
    }

    public boolean validarLoginUsuario(String login, String senha) {
        return !((login == null || login.trim().equals(""))
                    || (senha == null || senha.trim().equals("")));
    }

    public boolean validarCadastroUsuario(HttpServletRequest request, 
                                          HttpServletResponse response,
                                          Usuarios usuario) throws ServletException,
                                                                   IOException {

        ArrayList<String> listaMsgsErro = new ArrayList<String>();

        if (usuario == null) {
            listaMsgsErro.add("Cadastro inválido");
        }

        if (usuario.getNome() == null
                || usuario.getNome().trim().equals("")) {

            listaMsgsErro.add("Nome completo inválido");
        }

        if (usuario.getLogin() == null
                || usuario.getLogin().trim().equals("")) {

            listaMsgsErro.add("Nome de usuário inválido");
        }

        if (usuario.getSenha() == null
                || usuario.getSenha().trim().equals("")) {

            listaMsgsErro.add("Senha inválida");
        }

        if (usuario.getEmail() == null
                || usuario.getEmail().trim().equals("")) {

            listaMsgsErro.add("E-mail inválido");
        } else if (usuario.getEmail().indexOf("@") == -1) {
            listaMsgsErro.add("E-mail inválido");
        }

        if (!listaMsgsErro.isEmpty()) {
            String[] arrayErros = new String[listaMsgsErro.size()];

            for (int i=0; i < listaMsgsErro.size(); i++) {
                arrayErros[i] = listaMsgsErro.get(i);
            }

            Util.mostrarMensagemErro(request, response, FORWARD_CADASTRO_USUARIO, arrayErros);

            return false;
        }

        return true;
    }

}
